'''
collections.deque类实现一种线程安全的双端队列，旨在快速在两端插入和删除项。如果需要保留“最后几项”，或者实现类似的行为，则双端队列是唯一选择，因为deque对象可以有界，即长度固定。有界的deque对象填满之后，从一端添加新项，将从另一端丢弃一项。
'''
from collections import deque
dq = deque(range(10), maxlen=10)
#可选的maxlen参数设定deque实例中最多允许存放多少项。maxlen也是deque实例的一个只读属性。
#[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
dq.rotate(3)
#轮转，当n > 0，从右端取几项放到左端；当n < 0，从左端取几项放到右端。
#[7, 8, 9, 0, 1, 2, 3, 4, 5, 6]
dq.rotate(-4)#[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
dq.appendleft(-1)#向已满（len(d) == d.maxlen）的deque对象中的一端追加几项，则另一端要丢弃几项。
#[-1, 1, 2, 3, 4, 5, 6, 7, 8, 9]
dq.extend([11, 22, 33])
#在右端添加 3 项，把左端前 3 项-1、1和2挤出队列。
#[3, 4, 5, 6, 7, 8, 9, 11, 22, 33]
dq.extendleft([10, 20, 30, 40])
#xtendleft(iter)依次把iter参数中的各项追加到deque对象的左端，因此项之间的位置顺序得到保留。
#[40, 30, 20, 10, 3, 4, 5, 6, 7, 8]